package com.guigu.order.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.guigu.base.entity.vo.OrderDashboardVO;
import com.guigu.order.entity.Order;
import com.baomidou.mybatisplus.extension.service.IService;
import com.guigu.order.entity.dto.OrderDTO;
import com.guigu.order.entity.query.OrderQuery;
import com.guigu.tms.result.R;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 订单 服务类
 * </p>
 *
 * @author TaoLong
 * @since 2021-11-09
 */
public interface OrderService extends IService<Order> {

    /**
     * 订单添加
     *
     * @param orderDTO
     */
    public void addOrder(OrderDTO orderDTO);

    /**
     * 条件查询订单信息
     *
     * @param orderQuery :order对象
     * @param pageNum    页码
     * @param pageSize   页数
     * @return
     */
    public R<Page<Order>> getOrderInfo(OrderQuery orderQuery, Integer pageNum, Integer pageSize);

    /**
     * 根据订单id查询订单重量信息和订单位置信息
     *
     * @param orderId 订单id
     * @return
     */
    public R<Map> getOrderCargoVoAndOrderLocationVoInfoByOrderId(String orderId);

    /**
     * 订单修改(当订单只是处于下单状态时,才能修改)
     *
     * @param orderDTO
     * @return
     */
    public R updateOrder(OrderDTO orderDTO);

    /**
     * 订单删除 删除及它的一切数据
     *
     * @param orderId
     * @return
     */
    public R deleteOrder(String orderId);


    /***
     * 订单超时
     * @param orderId
     * @return
     */
    public R changeOrderTimeout(String orderId);

    /**
     * 支付成功,将订单设置为已支付
     *
     * @param orderId
     * @return
     */
    public R paySuccess(String orderId);

    /**
     * 查询带取件并且是状态是已付的订单信息
     *
     * @param status        订单状态
     * @param paymentStatus 付款状态
     * @return
     */
    public List<Order> getOrderList(Integer status, Integer paymentStatus);

    /**
     * 获取订单数据服务看板
     * @return
     * @param dateCount
     */
    public OrderDashboardVO getOrderDashboardData(Integer dateCount);

    /**
     * 根据用户id查询
     * @param memberId
     * @return
     */
    public Map<String,Object> getOrderListByMemberId(String memberId);

}
